realloc() এর মাধ্যমে মেমোরি পুনরায় বরাদ্দ

Dynamic Memory Allocation (ডাইনামিক মেমোরি অ্যালোকেশন) - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) - Computer Programming

508

realloc() এর মাধ্যমে মেমোরি পুনরায় বরাদ্দ

realloc() (reallocation) ফাংশনটি সি প্রোগ্রামিংয়ে মেমোরি ব্লকের আকার পরিবর্তন করার জন্য ব্যবহৃত হয়। এটি পূর্বে বরাদ্দকৃত মেমোরি ব্লকের আকার বাড়াতে বা কমাতে সাহায্য করে। যখন আপনি ডাইনামিকভাবে মেমোরি বরাদ্দ করেন, তখন মেমোরি ব্লকের আকারের পরিবর্তন প্রয়োজন হতে পারে, এবং realloc() এর মাধ্যমে মেমোরি ব্লকটি পুনরায় বরাদ্দ করা যায়।

realloc() এর কাজ:

  • realloc() ফাংশনটি একটি পূর্ববর্তী বরাদ্দকৃত মেমোরি ব্লককে পুনরায় বরাদ্দ করে এবং তার আকার পরিবর্তন করে।
  • এটি নতুন আকারের জন্য মেমোরি বরাদ্দ করে এবং পুরানো ডেটা নতুন মেমোরি ব্লকে কপি করে। তবে, যদি নতুন মেমোরি বরাদ্দ সম্ভব না হয়, এটি NULL রিটার্ন করতে পারে।
  • যদি realloc() সফলভাবে কাজ করে, এটি নতুন মেমোরির ঠিকানা রিটার্ন করে, যা আপনাকে নতুন আকারের মেমোরি ব্যবহারের সুযোগ দেয়।

সিঙ্কট্যাক্স:

void *realloc(void *ptr, size_t new_size);
  • ptr – পূর্বে বরাদ্দকৃত মেমোরির পয়েন্টার।
  • new_size – নতুন মেমোরি আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    int i;

    // প্রথমে 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    ptr = (int *)malloc(5 * sizeof(int));

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;
    }

    // প্রথম 5টি ইন্টিজার ইনিশিয়ালাইজ করা
    for (i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }

    // মেমোরি আকার বাড়ানো, 10টি ইন্টিজারের জন্য নতুন মেমোরি বরাদ্দ
    ptr = (int *)realloc(ptr, 10 * sizeof(int));

    if (ptr == NULL) {
        printf("Memory reallocation failed.\n");
        return 1;
    }

    // নতুন 5টি ইন্টিজার ইনিশিয়ালাইজ করা
    for (i = 5; i < 10; i++) {
        ptr[i] = i + 1;
    }

    // পুরো মেমোরি আউটপুট করা
    for (i = 0; i < 10; i++) {
        printf("%d ", ptr[i]);
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

ব্যাখ্যা:

  1. প্রথমে malloc() ফাংশন ব্যবহার করে 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করা হয়েছে।
  2. তারপর realloc() ফাংশন ব্যবহার করে মেমোরি ব্লকটির আকার বাড়ানো হয়েছে, 5টি থেকে 10টি ইন্টিজার সংরক্ষণের জন্য।
  3. পুরানো ডেটা নতুন মেমোরি ব্লকে কপি হয়ে গেছে এবং নতুন ডেটা সেট করা হয়েছে।
  4. শেষে, free() ফাংশন ব্যবহার করে বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।

কিছু গুরুত্বপূর্ণ পয়েন্ট:

  • realloc() ফাংশনটি সফলভাবে মেমোরি পুনরায় বরাদ্দ করলে নতুন মেমোরি ব্লকের ঠিকানা রিটার্ন করে। এটি মেমোরির পয়েন্টারকে আপডেট করতে হয়। যদি আপনি নতুন মেমোরি ব্লকের ঠিকানা ফিরে না নেন, তবে আপনি NULL পয়েন্টার পাবেন এবং পুরানো মেমোরি ব্লকটি পরিবর্তন হবে না।
  • যদি realloc() ফাংশনটি সফল না হয়, এটি NULL রিটার্ন করবে এবং আগের মেমোরি ব্লকটি অপরিবর্তিত থাকবে। এজন্য, এটি ব্যবহার করার সময় সতর্ক থাকতে হবে এবং পয়েন্টার যাচাই করা উচিত।
  • realloc() ফাংশনটি মেমোরি ব্লকের আকার পরিবর্তন করার সময় মেমোরি স্থানান্তর করতে পারে (যদি প্রয়োজন হয়), এবং এই কারণে নতুন পয়েন্টারটি আগের পয়েন্টার থেকে আলাদা হতে পারে।

সারসংক্ষেপ

realloc() ফাংশনটি পূর্বে বরাদ্দকৃত মেমোরি ব্লকের আকার পরিবর্তন করতে ব্যবহৃত হয়। এটি পুরানো মেমোরি ব্লকে থাকা ডেটা নতুন ব্লকে কপি করে এবং নতুন মেমোরি ব্লকের ঠিকানা রিটার্ন করে। এটি মেমোরি ব্যবস্থাপনার জন্য খুবই গুরুত্বপূর্ণ এবং ডাইনামিক মেমোরি ম্যানিপুলেশনের ক্ষেত্রে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...